/**
 * 一个立方体，三个维度分别有若干直线
 * 问同时被三个方向的线穿过的格子有多少个
 * 输入给出了从内部看，6个表面直线情况
 * 输入的时候直接打标记即可
 * 以左下角为原点建立右手坐标系
 * 注意从内部看前、后、左、右、顶、底的坐标变化情况
 * 最后标记为7的格子说明三个方向均有直线
 */
#include <bits/stdc++.h>
using namespace std;

using vi = vector<int>;
using vvi = vector<vi>;

int N;
vector<vvi> A;

void proc(){
    A.assign(N, vvi(N, vi(N, 0)));
    /// 正面
    for(int z=N-1;z>=0;--z){
        string s; cin >> s;
        for(int i=0,x=N-1;x>=0;--x,++i){
            if(s[i] == '#'){
                for(int y=0;y<N;++y) A[x][y][z] |= 1;
            }
        }
    }
    /// beimian
    for(int z=N-1;z>=0;--z){
        string s; cin >> s;
        for(int x=0;x<N;++x){
            if(s[x] == '#'){
                for(int y=0;y<N;++y) A[x][y][z] |= 1;
            }
        }
    }
    /// zuo
    for(int z=N-1;z>=0;--z){
        string s; cin >> s;
        for(int y=0;y<N;++y){
            if(s[y] == '#'){
                for(int x=0;x<N;++x) A[x][y][z] |= 2;
            }
        }
    }
    /// you
    for(int z=N-1;z>=0;--z){
        string s; cin >> s;
        for(int i=0,y=N-1;y>=0;--y,++i){
            if(s[i] == '#'){
                for(int x=0;x<N;++x) A[x][y][z] |= 2;
            }
        }
    }
    /// top
    for(int y=0;y<N;++y){
        string s; cin >> s;
        for(int x=0;x<N;++x){
            if(s[x] == '#'){
                for(int z=0;z<N;++z) A[x][y][z] |= 4;
            }
        }
    }
    /// bottom
    for(int y=N-1;y>=0;--y){
        string s; cin >> s;
        for(int x=0;x<N;++x){
            if(s[x] == '#'){
                for(int z=0;z<N;++z) A[x][y][z] |= 4;
            }
        }
    }

    int ans = 0;
    for(const auto & a : A)for(const auto & b : a)for(auto i : b){
        if(i == 7) ++ans;
    }
    cout << ans << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    while(cin >> N) proc();
    return 0;
}